/***
题目链接：一次编辑
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 
给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑
https://leetcode-cn.com/problems/one-away-lcci/
***/

class Solution {
public:
    bool oneEditAway(string first, string second) {
        //记录数据不等的个数
        int count = 0;
        int index = -1;//记录位置不相等的点索引
        int first_len = first.size();
        int second_len = second.size();
        if (first_len == 0 && second_len == 0)return true;
        if(first_len == second_len){//替换长度一样
            for(int i = 0; i < first_len; i++){
                if (first[i]!=second[i]){
                    count++;
                    continue;
                }
            }
            if(count <= 1) return true;
        }
        if(first_len == second_len + 1){//删除，长度减掉一
            for(int i = 0; i < second_len; i++){
                if (first[i]!=second[i]){
                    index = i;
                    break;
                }
            }
            if(index == -1) return true;
            for(int j = index; j < second_len; j++){
                if(first[j+1]!=second[j]) count++;
            }
            if(count == 0)return true;
        }
        if(first_len == second_len - 1){//插入，长度加一
            for(int i = 0; i < first_len; i++){
                if (first[i]!=second[i]){
                    index = i;
                    break;
                }
            }
            if(index == -1) return true;
            for(int j = index; j < first_len; j++){
                if(first[j]!=second[j+1]) count++;
            }
            if(count == 0)return true;            
        }
        return false;
        
    }
};